{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 调整树的参数：subsample 和 colsample_bytree\n",
    "(粗调，参数的步长为0.1；下一步是在粗调最佳参数周围，将步长降为0.05，进行精细调整)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "from xgboost import XGBClassifier\n",
    "import xgboost as xgb\n",
    "\n",
    "import pandas as pd \n",
    "import numpy as np\n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.model_selection import StratifiedKFold\n",
    "\n",
    "from sklearn.metrics import log_loss\n",
    "\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 读取数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "# path to where the data lies\n",
    "dpath = './data/'\n",
    "train = pd.read_csv(dpath +\"RentListingInquries_FE_train.csv\")\n",
    "# train.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 准备数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "y_train = train['interest_level']\n",
    "\n",
    "train = train.drop(['interest_level'], axis=1, inplace = False)\n",
    "X_train = train"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\model_selection\\_split.py:2026: FutureWarning: From version 0.21, test_size will always complement train_size unless both are specified.\n",
      "  FutureWarning)\n"
     ]
    }
   ],
   "source": [
    "# 训练样本6w+，交叉验证太慢，用train_test_split估计模型性能\n",
    "from sklearn.model_selection import train_test_split\n",
    "X_train_part, X_val, y_train_part, y_val = train_test_split(X_train, y_train, train_size = 0.2,random_state = 0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(9870, 227)"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_train_part.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "各类样本不均衡，交叉验证是采用StratifiedKFold，在每折采样时各类样本按比例采样"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "# prepare cross validation\n",
    "kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=3)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "第二轮参数调整得到的n_estimators最优值（104），其余参数继续默认值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'subsample': [0.3, 0.4, 0.5, 0.6, 0.7, 0.8],\n",
       " 'colsample_bytree': [0.6, 0.7, 0.8, 0.9]}"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#max_depth 建议3-10， min_child_weight=1／sqrt(ratio_rare_event) =5.5\n",
    "subsample = [i/10.0 for i in range(3,9)]\n",
    "colsample_bytree = [i/10.0 for i in range(6,10)]\n",
    "param_test3_1 = dict(subsample=subsample, colsample_bytree=colsample_bytree)\n",
    "param_test3_1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\model_selection\\_search.py:761: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.63354, std: 0.01050, params: {'colsample_bytree': 0.6, 'subsample': 0.3},\n",
       "  mean: -0.62874, std: 0.00803, params: {'colsample_bytree': 0.6, 'subsample': 0.4},\n",
       "  mean: -0.62577, std: 0.00497, params: {'colsample_bytree': 0.6, 'subsample': 0.5},\n",
       "  mean: -0.62467, std: 0.00792, params: {'colsample_bytree': 0.6, 'subsample': 0.6},\n",
       "  mean: -0.62240, std: 0.00938, params: {'colsample_bytree': 0.6, 'subsample': 0.7},\n",
       "  mean: -0.62194, std: 0.00815, params: {'colsample_bytree': 0.6, 'subsample': 0.8},\n",
       "  mean: -0.62972, std: 0.00808, params: {'colsample_bytree': 0.7, 'subsample': 0.3},\n",
       "  mean: -0.62802, std: 0.00732, params: {'colsample_bytree': 0.7, 'subsample': 0.4},\n",
       "  mean: -0.62740, std: 0.00874, params: {'colsample_bytree': 0.7, 'subsample': 0.5},\n",
       "  mean: -0.62292, std: 0.00749, params: {'colsample_bytree': 0.7, 'subsample': 0.6},\n",
       "  mean: -0.62222, std: 0.00784, params: {'colsample_bytree': 0.7, 'subsample': 0.7},\n",
       "  mean: -0.62193, std: 0.00837, params: {'colsample_bytree': 0.7, 'subsample': 0.8},\n",
       "  mean: -0.63289, std: 0.00952, params: {'colsample_bytree': 0.8, 'subsample': 0.3},\n",
       "  mean: -0.62673, std: 0.00746, params: {'colsample_bytree': 0.8, 'subsample': 0.4},\n",
       "  mean: -0.62514, std: 0.00543, params: {'colsample_bytree': 0.8, 'subsample': 0.5},\n",
       "  mean: -0.62411, std: 0.00596, params: {'colsample_bytree': 0.8, 'subsample': 0.6},\n",
       "  mean: -0.62118, std: 0.00649, params: {'colsample_bytree': 0.8, 'subsample': 0.7},\n",
       "  mean: -0.62313, std: 0.00772, params: {'colsample_bytree': 0.8, 'subsample': 0.8},\n",
       "  mean: -0.63122, std: 0.00933, params: {'colsample_bytree': 0.9, 'subsample': 0.3},\n",
       "  mean: -0.62991, std: 0.00947, params: {'colsample_bytree': 0.9, 'subsample': 0.4},\n",
       "  mean: -0.62627, std: 0.01030, params: {'colsample_bytree': 0.9, 'subsample': 0.5},\n",
       "  mean: -0.62446, std: 0.00766, params: {'colsample_bytree': 0.9, 'subsample': 0.6},\n",
       "  mean: -0.62416, std: 0.00692, params: {'colsample_bytree': 0.9, 'subsample': 0.7},\n",
       "  mean: -0.62322, std: 0.00726, params: {'colsample_bytree': 0.9, 'subsample': 0.8}],\n",
       " {'colsample_bytree': 0.8, 'subsample': 0.7},\n",
       " -0.6211825901670985)"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb3_1 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=103,  #第二轮参数调整得到的n_estimators最优值\n",
    "        max_depth=6,\n",
    "        min_child_weight=3,\n",
    "        gamma=0,\n",
    "        subsample=0.5,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "\n",
    "\n",
    "gsearch3_1 = GridSearchCV(xgb3_1, param_grid = param_test3_1, scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "gsearch3_1.fit(X_train_part , y_train_part)\n",
    "\n",
    "gsearch3_1.grid_scores_, gsearch3_1.best_params_,     gsearch3_1.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'mean_fit_time': array([57.23838515, 60.93031459, 61.98598161, 62.75512486, 62.43877001,\n",
       "        62.92167888, 58.93693857, 63.24421597, 67.32250633, 67.60794206,\n",
       "        67.15914202, 67.0616044 , 63.04218602, 67.10319419, 72.41182947,\n",
       "        71.84341254, 71.56775002, 71.63457513, 65.40464931, 71.42054367,\n",
       "        75.62609358, 76.80673594, 76.48419776, 71.79773459]),\n",
       " 'std_fit_time': array([2.42462273, 1.45850056, 0.10652793, 0.43749914, 0.16759255,\n",
       "        0.76284463, 0.81371123, 0.64147115, 0.66389042, 0.35106698,\n",
       "        0.34025925, 0.05938975, 0.7906469 , 0.33846658, 0.77259105,\n",
       "        0.20278833, 0.11378523, 0.20935183, 0.18160879, 0.06783759,\n",
       "        0.40940595, 0.27817674, 0.09456175, 5.33970218]),\n",
       " 'mean_score_time': array([0.15917363, 0.13663588, 0.14361677, 0.1424192 , 0.14142213,\n",
       "        0.14860363, 0.14321795, 0.15119586, 0.14979963, 0.14541144,\n",
       "        0.14241996, 0.13862987, 0.13862653, 0.1374332 , 0.1384304 ,\n",
       "        0.13763194, 0.13703423, 0.14561172, 0.14441586, 0.14182143,\n",
       "        0.13803091, 0.13463936, 0.13743262, 0.11249924]),\n",
       " 'std_score_time': array([0.02450571, 0.00315419, 0.01159602, 0.00619352, 0.00757979,\n",
       "        0.01253665, 0.00799397, 0.02773626, 0.01284032, 0.01173886,\n",
       "        0.00298521, 0.00710804, 0.0016711 , 0.00400951, 0.00513908,\n",
       "        0.00178406, 0.00381646, 0.00898699, 0.01433336, 0.00565579,\n",
       "        0.00421286, 0.00327745, 0.00425053, 0.02488495]),\n",
       " 'param_colsample_bytree': masked_array(data=[0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.7, 0.7, 0.7, 0.7, 0.7,\n",
       "                    0.7, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.9, 0.9, 0.9, 0.9,\n",
       "                    0.9, 0.9],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False, False, False, False, False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'param_subsample': masked_array(data=[0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.3, 0.4, 0.5, 0.6, 0.7,\n",
       "                    0.8, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.3, 0.4, 0.5, 0.6,\n",
       "                    0.7, 0.8],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False, False, False, False, False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'params': [{'colsample_bytree': 0.6, 'subsample': 0.3},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 0.4},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 0.5},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 0.6},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 0.7},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 0.8},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.3},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.4},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.5},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.6},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.7},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.8},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.3},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.4},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.5},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.6},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.7},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.8},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.3},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.4},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.5},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.6},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.7},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.8}],\n",
       " 'split0_test_score': array([-0.63860667, -0.63571932, -0.62754553, -0.62798527, -0.62548281,\n",
       "        -0.6275647 , -0.62818302, -0.63009181, -0.6279372 , -0.62810363,\n",
       "        -0.62729599, -0.626746  , -0.63904881, -0.63012981, -0.62718282,\n",
       "        -0.62621887, -0.62427299, -0.62813553, -0.63356407, -0.63223918,\n",
       "        -0.63093181, -0.62754465, -0.63069888, -0.62863224]),\n",
       " 'split1_test_score': array([-0.65194066, -0.64094443, -0.63400103, -0.63704136, -0.63864862,\n",
       "        -0.63526174, -0.64495859, -0.64129564, -0.64378115, -0.63459701,\n",
       "        -0.63273084, -0.63528753, -0.64863897, -0.63954809, -0.63487911,\n",
       "        -0.63432918, -0.6322779 , -0.63487802, -0.64733123, -0.64491768,\n",
       "        -0.64382372, -0.63806197, -0.63403227, -0.63476846]),\n",
       " 'split2_test_score': array([-0.62469023, -0.62206205, -0.62517588, -0.62190973, -0.61797743,\n",
       "        -0.61432256, -0.6253762 , -0.62337765, -0.62020743, -0.62015332,\n",
       "        -0.61986766, -0.61517617, -0.62769553, -0.62391083, -0.62180994,\n",
       "        -0.6224894 , -0.61730453, -0.61948881, -0.62300287, -0.62393352,\n",
       "        -0.61935122, -0.62042528, -0.61782904, -0.61937189]),\n",
       " 'split3_test_score': array([-0.62526932, -0.62147796, -0.61904441, -0.6128037 , -0.61072621,\n",
       "        -0.61553796, -0.62120967, -0.62057667, -0.61982344, -0.6135981 ,\n",
       "        -0.6093546 , -0.61187215, -0.62392556, -0.61854957, -0.62003631,\n",
       "        -0.61666432, -0.61383558, -0.61233469, -0.62107053, -0.61655937,\n",
       "        -0.61436677, -0.619344  , -0.61713233, -0.61638461]),\n",
       " 'split4_test_score': array([-0.6271756 , -0.623489  , -0.62310534, -0.62358643, -0.61918566,\n",
       "        -0.61702226, -0.62886798, -0.62474609, -0.62526015, -0.61813368,\n",
       "        -0.62185735, -0.62057051, -0.62514682, -0.62150798, -0.62176708,\n",
       "        -0.6208255 , -0.61821888, -0.62082155, -0.63114056, -0.63192227,\n",
       "        -0.62288218, -0.61692561, -0.62108589, -0.61692169]),\n",
       " 'mean_test_score': array([-0.63353765, -0.62873979, -0.62577489, -0.62466574, -0.62240478,\n",
       "        -0.62194291, -0.62971902, -0.62801811, -0.62740214, -0.62291816,\n",
       "        -0.62222184, -0.6219311 , -0.63289255, -0.62673013, -0.6251356 ,\n",
       "        -0.624106  , -0.62118259, -0.62313246, -0.6312221 , -0.62991444,\n",
       "        -0.62627196, -0.62446138, -0.62415666, -0.62321696]),\n",
       " 'std_test_score': array([0.01050215, 0.00803212, 0.00497167, 0.00792021, 0.00937752,\n",
       "        0.00815236, 0.00808205, 0.007324  , 0.00874465, 0.00749247,\n",
       "        0.00784143, 0.0083696 , 0.00952103, 0.00745642, 0.005432  ,\n",
       "        0.00596201, 0.00648781, 0.00772279, 0.0093339 , 0.00947273,\n",
       "        0.01030441, 0.00766452, 0.00691599, 0.00726434]),\n",
       " 'rank_test_score': array([24, 19, 14, 12,  5,  3, 20, 18, 17,  6,  4,  2, 23, 16, 13,  9,  1,\n",
       "         7, 22, 21, 15, 11, 10,  8]),\n",
       " 'split0_train_score': array([-0.45633368, -0.44164135, -0.43444191, -0.42624113, -0.41928185,\n",
       "        -0.41824844, -0.45544278, -0.43706606, -0.42869498, -0.41977008,\n",
       "        -0.41725779, -0.41246837, -0.44549716, -0.43286862, -0.42422239,\n",
       "        -0.41322601, -0.40794649, -0.41068456, -0.44230548, -0.42844468,\n",
       "        -0.41808214, -0.41158397, -0.41035624, -0.40871748]),\n",
       " 'split1_train_score': array([-0.45500027, -0.44189066, -0.42966559, -0.42424556, -0.4148653 ,\n",
       "        -0.41947037, -0.45296762, -0.43368425, -0.42400158, -0.41514313,\n",
       "        -0.41116771, -0.41226369, -0.44250336, -0.42992878, -0.41849524,\n",
       "        -0.41581601, -0.41011424, -0.40740781, -0.43919449, -0.42599299,\n",
       "        -0.41662303, -0.41010981, -0.40436175, -0.40401569]),\n",
       " 'split2_train_score': array([-0.45771668, -0.45022194, -0.43988734, -0.43109464, -0.42622399,\n",
       "        -0.42227658, -0.45275706, -0.43867878, -0.4329954 , -0.42482258,\n",
       "        -0.42203142, -0.41911716, -0.45057793, -0.43360486, -0.4232225 ,\n",
       "        -0.42334568, -0.41918186, -0.41694528, -0.44554038, -0.42949082,\n",
       "        -0.4199135 , -0.41407399, -0.41111207, -0.41193733]),\n",
       " 'split3_train_score': array([-0.45737194, -0.445093  , -0.43641934, -0.43078804, -0.42295126,\n",
       "        -0.42161388, -0.45323399, -0.43529716, -0.43063755, -0.42570906,\n",
       "        -0.42145365, -0.41396301, -0.45337677, -0.4344356 , -0.42883594,\n",
       "        -0.41719169, -0.41834158, -0.41222161, -0.44463885, -0.43049414,\n",
       "        -0.42350429, -0.41361883, -0.410676  , -0.40634291]),\n",
       " 'split4_train_score': array([-0.45919027, -0.44399239, -0.43850971, -0.42431175, -0.4243175 ,\n",
       "        -0.42007488, -0.45236106, -0.43703343, -0.4284678 , -0.42304157,\n",
       "        -0.42502017, -0.41936368, -0.45168664, -0.43371674, -0.42373752,\n",
       "        -0.42348495, -0.41456324, -0.41209415, -0.44570888, -0.43085464,\n",
       "        -0.42124618, -0.41366822, -0.408398  , -0.40875497]),\n",
       " 'mean_train_score': array([-0.45712257, -0.44456786, -0.43578478, -0.42733622, -0.42152798,\n",
       "        -0.42033683, -0.4533525 , -0.43635193, -0.42895946, -0.42169728,\n",
       "        -0.41938615, -0.41543518, -0.44872837, -0.43291092, -0.42370272,\n",
       "        -0.41861287, -0.41402948, -0.41187068, -0.44347761, -0.42905545,\n",
       "        -0.41987383, -0.41261096, -0.40898081, -0.40795368]),\n",
       " 'std_train_score': array([0.00140122, 0.00310829, 0.0035751 , 0.00303116, 0.00403227,\n",
       "        0.00145425, 0.00108342, 0.00170984, 0.00296638, 0.00385591,\n",
       "        0.00479764, 0.00316284, 0.0040736 , 0.00157166, 0.00328541,\n",
       "        0.00412304, 0.00442172, 0.00307404, 0.00246175, 0.00174632,\n",
       "        0.00240179, 0.00152214, 0.0024893 , 0.0026532 ])}"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch3_1.cv_results_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.621183 using {'colsample_bytree': 0.8, 'subsample': 0.7}\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# summarize results\n",
    "print(\"Best: %f using %s\" % (-gsearch3_1.best_score_, gsearch3_1.best_params_))\n",
    "test_means = gsearch3_1.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch3_1.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch3_1.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch3_1.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pd.DataFrame(gsearch3_1.cv_results_).to_csv('my_preds_subsampleh_colsample_bytree_1.csv')\n",
    "\n",
    "# plot results\n",
    "test_scores = np.array(test_means).reshape(len(colsample_bytree), len(subsample))\n",
    "train_scores = np.array(train_means).reshape(len(colsample_bytree), len(subsample))\n",
    "\n",
    "for i, value in enumerate(colsample_bytree):\n",
    "    pyplot.plot(subsample, -test_scores[i], label= 'test_colsample_bytree:'   + str(value))\n",
    "# for i, value in enumerate(colsample_bytree):\n",
    "#     pyplot.plot(subsample, -train_scores[i], label= 'train_colsample_bytree:'   + str(value))\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'subsample' )                                                                                                      \n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig( 'subsample_vs_colsample_bytree1.png' )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "当前调参结果：  \n",
    "最优colsample_bytree为0.8；   \n",
    "最优subsample为0.7。"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
